package leetcode.binarytree;

import leetcode.TreeNode;

import java.util.ArrayList;
import java.util.List;

/**
 * @author Cheng Jun
 * Description: 给定一个二叉树的根节点 root ，返回它的 中序 遍历。
 * https://leetcode-cn.com/problems/binary-tree-inorder-traversal/
 * 进阶: 递归算法很简单，你可以通过迭代算法完成吗？
 * @version 1.0
 * @date 2021/11/25 10:31
 * 面试题 二刷
 */
public class inorderTraversal {

    public static void main(String[] args) {
        TreeNode a = new TreeNode(3);
        TreeNode b = new TreeNode(2);
        TreeNode c = new TreeNode(1, b, a);
        System.out.println(inorderTraversal(c));
    }

    // 给定一个二叉树的根节点 root ，返回它的 中序 遍历。
    static List<Integer> inorderTraversal(TreeNode root) {
        List<Integer> res = new ArrayList<Integer>();
        inorderTraversalRec(root, res);
        return res;
    }

    // 中序遍历，先加 左节点，直到左节点为null，然后父节点，最后加右节点
    static void inorderTraversalRec(TreeNode root, List<Integer> res) {
        if (root == null) return;
        //      1
        //   2     3
        // 4   5  6   7
        inorderTraversalRec(root.left, res);
        res.add(root.val);
        inorderTraversalRec(root.right, res);
    }

}
